//package com.fecean.aabbc.netty.server.prod2;
//
//import com.fecean.aabbc.netty.message2.NettyMessage;
//import com.fecean.aabbc.netty.message2.NettyMessageBuilder;
//import io.netty.channel.Channel;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.stereotype.Component;
//
//import java.util.Optional;
//import java.util.concurrent.ConcurrentHashMap;
//import java.util.concurrent.ConcurrentMap;
//
///**
// ** Netty客户端通道缓存
// *
// * @author: chenfenghai
// * @version: 1.0
// * @date: 2020-03-10 10:34
// * @blame Team
// */
//@Slf4j
//@Component
//public class NettyClientGroup {
//
//    /**
//     ** Netty客户端Map
//     */
//    private static ConcurrentMap<String, NettyClient> nettyClientMap = new ConcurrentHashMap<>();
//
//    /**
//     ** 添加客户端通道
//     * @param tenantId 租户ID
//     * @param cinemaCode 影院编码
//     * @param channel 客户端通道
//     */
//    public void addClientChannel(String tenantId, String cinemaCode, Channel channel){
//        NettyClient nettyClient = new NettyClient(tenantId, cinemaCode, channel);
//        String uniqueKey = buildClientUniqueKey(tenantId, cinemaCode);
//        nettyClientMap.remove(uniqueKey);
//        nettyClientMap.put(uniqueKey, nettyClient);
//    }
//
//    /**
//     ** 获取客户端通道
//     * @param tenantId 租户ID
//     * @param cinemaCode 影院编码
//     * @return 客户端
//     */
//    public Optional<NettyClient> getClientChannel(String tenantId, String cinemaCode){
//        return Optional.ofNullable(nettyClientMap.get(buildClientUniqueKey(tenantId, cinemaCode)));
//    }
//
//    /**
//     ** 获取客户端通道
//     * @param channel 客户端通道
//     * @return 客户端
//     */
//    public Optional<NettyClient> getClientChannel(Channel channel){
//        return nettyClientMap.values().stream()
//                .filter(nettyClient -> nettyClient.getChannel() == channel)
//                .findFirst();
//    }
//
//    /**
//     ** 移除客户端通道
//     * @param tenantId 租户ID
//     * @param cinemaCode 影院编码
//     */
//    public void removeClientChannel(String tenantId, String cinemaCode){
//        nettyClientMap.remove(buildClientUniqueKey(tenantId, cinemaCode));
//    }
//
//    /**
//     ** 移除客户端通道
//     * @param channel 客户端通道
//     */
//    public void removeClientChannel(Channel channel){
//        nettyClientMap.entrySet().removeIf(entry -> entry.getValue().getChannel() == channel);
//    }
//
//    /**
//     ** 获取客户端通道数量
//     * @return 客户端通道数量
//     */
//    public int getSize(){
//        return nettyClientMap.size();
//    }
//
//    /**
//     ** 发送消息
//     * @param tenantId 租户ID
//     * @param cinemaCode 影院编码
//     * @param content 消息内容
//     */
//    public void sendMessage(String tenantId, String cinemaCode, String content){
//        Optional<NettyClient> optionalChannel = getClientChannel(tenantId, cinemaCode);
//        optionalChannel.ifPresent(client -> {
//            NettyMessage nettyMessage = NettyMessageBuilder.buildBusinessMessage(tenantId, cinemaCode, content);
//            client.getChannel().writeAndFlush(nettyMessage);
//        });
//    }
//
//    /**
//     ** 组装客户端唯一Key，格式：客户端租户ID + 下划线 + 客户端影院编码
//     * @param tenantId 租户ID
//     * @param cinemaCode 影院编码
//     * @return String
//     */
//    private String buildClientUniqueKey(String tenantId, String cinemaCode){
//        return StringUtils.joinWith("_",
//                                    StringUtils.trimToEmpty(tenantId),
//                                    StringUtils.trimToEmpty(cinemaCode));
//    }
//}
